package com.czk.basicqueue.send;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MessageProperties;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * 消息生产者
 *
 * @Author:ChenZhangKun
 * @Date: 2021/1/2 16:02
 */
public class ProviderTest {
    public static void main(String[] args) throws IOException, TimeoutException {
        // 创建mq的连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        // 设置rabbitmq主机
        connectionFactory.setHost("localhost");
        // 设置端口
        connectionFactory.setPort(5672);
        // 设置连接哪个虚拟主机
        connectionFactory.setVirtualHost("/czk");
        // 设置访问的用户名和密码
        connectionFactory.setUsername("guest");
        connectionFactory.setPassword("guest");
        // 获取链接
        Connection connection = connectionFactory.newConnection();
        // 获取链接通道
        Channel channel = connection.createChannel();
        // 通道绑定对应的消息队列
        // 参数一：队列名称，没有回自动创建
        // 参数二： 用来定义队列是否需要持久化 false表示不持久化
        // 参数三：是否独占队列，其他链接是否可用 false表示不是
        // 参数四：是否消费完成后立即删除队列
        // 参数五：额外附加参数
        channel.queueDeclare("hello", false, false, false, null);
        // 发布消息
        // 参数一：交换机名称，参数二：队列名。参数三：传递消息额外设置，参数四：消息的具体内容
        // 参数三，定义消息是否进行持久化,MessageProperties.PERSISTENT_TEXT_PLAIN定义消息持久化，null表示不持久化
        channel.basicPublish("", "hello", MessageProperties.PERSISTENT_TEXT_PLAIN, "hello,rabbitmq".getBytes());
        channel.close();
        connection.close();
    }
}
